#ifndef VL_EXCEPTION__H_
#define VL_EXCEPTION__H_

#include <string>
#include <cstring>
#include <cstdarg>

namespace VL {

class VLException {
public:
	/**
	 * @Author: CimZzz
	 * @Date: 2022-06-23 12:09:28
	 * 
	 * 构造方法
	 */
	explicit VLException();

	/**
	 * @Author: CimZzz
	 * @Date: 2022-06-10 16:55:06
	 * 
	 * 构造方法
	 * @param topic 主题
	 * @param fmt 格式化字符串
	 * @param ... 格式化参数
	 */
	explicit VLException(const char * topic, const char * fmt, ...);

	/**
	 * @Author: CimZzz
	 * @Date: 2022-06-10 16:55:06
	 * 
	 * 构造方法
	 * @param topic 主题
	 * @param fmt 格式化字符串
	 * @param valist 变长格式化参数列表
	 */
	explicit VLException(const char * topic, const char * fmt, va_list valist);

	/**
	 * @Author: CimZzz
	 * @Date: 2022-06-10 16:56:16
	 * 
	 * 获取异常消息
	 * @return 异常消息
	 */
	std::string getMessage() const;

private:
	/**
	 * @Author: CimZzz
	 * @Date: 2022-06-10 16:56:01
	 * 
	 * 异常消息
	 */
	std::string message;
};

}

#endif // VL_EXCEPTION__H_
